package com.ddxz.middleground.master.service;

import com.ddxz.middleground.master.dto.MasterHeader;
import com.ddxz.middleground.master.dto.user.ChangePassword;
import com.ddxz.middleground.master.dto.user.UserLogin;
import com.ddxz.middleground.master.dto.user.UserPage;
import com.ddxz.middleground.master.dto.user.UserInfo;
import com.ddxz.middleground.master.util.MasterData;
import com.ddxz.tool.web.dto.DdxzResponse;

import java.util.List;

/**
 * interface description
 *
 * @author 朱宗刚
 * @version 1.0.0
 * @date 2020/7/28
 */

public interface UserService extends MasterData {
    /**
     * 获取用户清单
     *
     * @param header    请求头信息
     * @param pageParam 分页参数
     * @return 用户清单
     */
    DdxzResponse getUserList(MasterHeader header, UserPage pageParam);

    /**
     * 用户详情
     *
     * @param header 请求头信息
     * @param userId 用户标识
     * @return 用户详情
     */
    DdxzResponse getUserDetail(MasterHeader header, String userId);

    /**
     * 保存用户信息，如果id为null则新增用户，否则修改已存在的用户
     *
     * @param user   用户信息
     * @param header 请求头信息
     * @return 保存用户的标识
     */
    DdxzResponse saveUser(UserInfo user, MasterHeader header);

    /**
     * 修改密码
     *
     * @param changePassword 新旧密码
     * @param header         请求头信息
     * @return 是否修改成功
     */
    DdxzResponse changePassword(ChangePassword changePassword, MasterHeader header);

    /**
     * 重置密码
     *
     * @param userId 需要重置密码的用户标识
     * @param header 请求头信息
     * @return 是否重置成功
     */
    DdxzResponse resetPassword(String userId, MasterHeader header);

    /**
     * 删除用户
     *
     * @param userId 需要删除的用户标识
     * @param header 请求头信息
     * @return 是否删除成功
     */
    DdxzResponse removeUser(String userId, MasterHeader header);

    /**
     * 用户登陆
     *
     * @param login 登陆信息
     * @return 成功与否
     */
    DdxzResponse login(UserLogin login);

    /**
     * 将用户与角色绑定到一起，完成用户授权
     *
     * @param header  请求头信息
     * @param userId  用户标识
     * @param roleIds 角色标识清单
     * @return 绑定成功与否
     */
    DdxzResponse grantUser(MasterHeader header, String userId, List<String> roleIds);
}
